package com.hspedu.homework.homework13;

/**
 * @Author Stringzhua
 * @Date 2024/3/3 20:08
 * description:打印效果如下:
 * 老师的信息:
 * 姓名:张飞
 * 年龄:30
 * 性别:男
 * 工龄:5
 * 我承诺,我会认真教学
 * 张飞爱玩象棋
 * <p>
 * 学生的信息:
 * 姓名:小明
 * 年龄:15
 * 性别:男
 * 学号:00023102
 * 我承诺,我会好好学习
 * 小明爱玩足球
 * <p>
 * 分析出需要一个打印方法
 * <p>
 * (7)定义多态数组,里面保存两个学生和两个教师,要求按年龄从高到低排序
 * (8)定义方法,形参为Person类型 功能:调用学生的study类或教师的teach()方法
 * 向下转型和类型判断
 */
public class homework13 {
    public static void main(String[] args) {
        //测试老师
        Teacher teacher = new Teacher("张飞", '男', 30, 5);
        teacher.printInfo();
        System.out.println("=================");
        //测试学生
        Student student = new Student("小明", '男', 15, "00023102");
        student.printInfo();
        // (7)定义多态数组,里面保存两个学生和两个教师,要求按年龄从高到低排序
        Person[] persons = new Person[4];
        persons[0] = new Student("jack", '男', 10, "0001");
        persons[1] = new Student("marry", '女', 20, "0002");
        persons[2] = new Teacher("smith", '男', 36, 5);
        persons[3] = new Teacher("scott", '男', 26, 1);

        //创建对象
        homework13 homework13 = new homework13();
        homework13.bubbleSort(persons);
        //输出排序后数组
        System.out.println("===排序后的数组===");
        for (int i = 0; i < persons.length; i++) {
            System.out.println(persons[i].toString());
        }

        //遍历数组,调用test
        System.out.println("==========");
        for (int i = 0; i < persons.length; i++) {
            homework13.test(persons[i]);
        }
    }

    //定义方法,形参为Person类型 功能:调用学生的study类或教师的teach()方法
    // 向下转型和类型判断
    public void test(Person p) {
        if (p instanceof Student) {//p的运行类型是Student
            ((Student) p).study();
        } else if (p instanceof Teacher) {
            ((Teacher) p).teach();
        } else {
            System.out.println("do nothing...");
        }
    }

    //方法,完成年龄从高到低排序
    public void bubbleSort(Person[] persons) {
        Person temp = null;
        for (int i = 0; i < persons.length - 1; i++) {
            for (int j = 0; j < persons.length - 1 - i; j++) {
                //判断条件 年龄从高到低
                if (persons[j].getAge() < persons[j + 1].getAge()) {
                    temp = persons[j];
                    persons[j] = persons[j + 1];
                    persons[j + 1] = temp;
                }
            }
        }
    }
}
